﻿namespace CSharpPro._1028;

 public class UserController : IUserService
    {
        private List<User> _userList = new List<User>();

        // 实现接口的Register方法
        public bool Register(string userName, string password, string confirmPwd)
        {
            if (password != confirmPwd)
            {
                Console.WriteLine("错误：密码与确认密码不一致");
                return false;
            }

            // 调用接口定义的IsUserNameExists方法，而非重复写判断逻辑
            if (IsUserNameExists(userName))
            {
                Console.WriteLine("错误：用户名已被注册");
                return false;
            }

            try
            {
                _userList.Add(new User(userName, password));
                Console.WriteLine("注册成功！");
                return true;
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine($"错误：{ex.Message}");
                return false;
            }
        }

        // 实现接口的Login方法
        public bool Login(string userName, string password)
        {
            foreach (var user in _userList)
            {
                if (user.UserName == userName)
                {
                    if (user.Password == password)
                    {
                        Console.WriteLine($"登录成功！欢迎您，{userName}");
                        return true;
                    }
                    Console.WriteLine("错误：密码不正确");
                    return false;
                }
            }
            Console.WriteLine("错误：用户名不存在");
            return false;
        }

        // 实现接口的IsUserNameExists方法
        public bool IsUserNameExists(string userName)
        {
            foreach (var user in _userList)
            {
                if (user.UserName == userName)
                {
                    return true;
                }
            }
            return false;
        }

        // 保留原有的流程控制方法（非接口定义，属于控制器特有逻辑）
        public void ShowMainMenu()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("===== 用户系统主菜单 =====");
                Console.WriteLine("1. 登录  2. 注册  3. 退出");
                Console.Write("请选择功能（1-3）：");

                if (!int.TryParse(Console.ReadLine(), out int choice))
                {
                    Console.WriteLine("请输入有效数字，按任意键继续...");
                    Console.ReadKey();
                    continue;
                }

                switch (choice)
                {
                    case 1:
                        HandleLoginInput();
                        break;
                    case 2:
                        HandleRegisterInput();
                        break;
                    case 3:
                        Console.WriteLine("系统已退出！");
                        return;
                    default:
                        Console.WriteLine("选择无效，按任意键继续...");
                        Console.ReadKey();
                        break;
                }
            }
        }

        private void HandleLoginInput()
        {
            Console.WriteLine("\n===== 用户登录 =====");
            Console.Write("用户名：");
            string name = Console.ReadLine()?.Trim();
            Console.Write("密码：");
            string pwd = Console.ReadLine()?.Trim();

            Login(name, pwd);
            Console.WriteLine("按任意键返回主菜单...");
            Console.ReadKey();
        }

        private void HandleRegisterInput()
        {
            Console.WriteLine("\n===== 用户注册 =====");
            Console.Write("用户名：");
            string name = Console.ReadLine()?.Trim();
            Console.Write("密码：");
            string pwd = Console.ReadLine()?.Trim();
            Console.Write("确认密码：");
            string confirmPwd = Console.ReadLine()?.Trim();

            Register(name, pwd, confirmPwd);
            Console.WriteLine("按任意键返回主菜单...");
            Console.ReadKey();
        }
    }